/*
 * AclassProl_config.h
 *
 *  Created on: 2021.10.28
 *      Author: taoye
 */
#ifndef ACLASSPROL_CONFIG_H_
#define ACLASSPROL_CONFIG_H_

/* Public defines -----------------------------------------------------------*/
#include "stm32f4xx.h"
/***********************************************************************************/
#define 	A_PROTOCOL_USE_RTOS			        1                   //是否使用RTOS（0：不使用, 1：使用）
#if A_PROTOCOL_USE_RTOS == 1
    #define   	A_PROTOCOL_TASK_SIZE		    1024                 //任务栈大小
    #define   	A_PROTOCOL_TASK_PRIORITY	    7                   //任务优先级
    #define     A_PROTOCOL_IRQ_STA			    __get_CONTROL()	    //获取当前运行状态（0：正常运行，1：中断运行）    
#endif

#define		A_PROTOCOL_MSG_QUEUE_SIZE	        5                   //接收队列深度

#define   	A_PROTOCOL_RECIVE_MAX    	        1200                //接收数据队列深度

#define   	A_PROTOCOL_SEND_MAX      	        1500                //单包最大发送字节数

#define		A_PROTOCOL_ACKDATA_MAX		        64                  //回复数据最大长度

#define     A_PROTOCOL_FRAME_TIMEOUT            20                   //帧超时时间（秒）（0：无帧超时）
#if         A_PROTOCOL_FRAME_TIMEOUT != 0
#if A_PROTOCOL_USE_RTOS == 1
    #define     A_PROTOCOL_TICK_PER_SECOND      configTICK_RATE_HZ  //时基频率（HZ）
    #define     A_PROTOCOL_COUNT_CYCLE          portMAX_DELAY       //循环周期     
    #define     A_PROTOCOL_GET_TICK_COUNT       xTaskGetTickCount   //获取时基函数   
#else
#include "osal.h"
    #define     A_PROTOCOL_TICK_PER_SECOND      1000                //时基频率（HZ）
    #define     A_PROTOCOL_COUNT_CYCLE          COUNT_CYCLE         //循环周期    
    #define     A_PROTOCOL_GET_TICK_COUNT       Osal_Get_TimeTick   //获取时基函数   
#endif
#endif

#define     A_PROTOCOL_USE_SYSTEM_RESET         1                   //是否使用回复复位功能（0：不使用, 1：使用）
#if A_PROTOCOL_USE_SYSTEM_RESET == 1
#include "drv_f4_delay_168MHz.h"
#define     A_PROTOCOL_DELAYMS_FUN              SoftDelayMs         //毫秒延时函数
#define     A_PROTOCOL_SYSTEM_RESET_FUN         NVIC_SystemReset    //系统复位函数
#define     A_PROTOCOL_RESET_DELAYTIME		    500                 //复位延时时间
#endif

#define		A_PROTOCOL_USE_DEBUG_LOG            0                  //是否使用log（0：不使用, 1：使用）
#if  A_PROTOCOL_USE_DEBUG_LOG == 1
#include "A_log.h"
#define 	A_PROTOCOL_NAME_MAX			        10                  //硬件注册名称最大长度（Aclass_Hardware_Register首个参数最大字节，log使用）
#define     ACLASS_LOG_I(...)                   LOG_I(__VA_ARGS__)
#define     ACLASS_LOG_D(...)                   LOG_D(__VA_ARGS__)
#define     ACLASS_LOG_W(...)                   LOG_W(__VA_ARGS__)
#define     ACLASS_LOG_E(...)                   LOG_W(__VA_ARGS__)  //log error会保存flash，暂时不开启
#define     ACLASS_LOG_HEX(...)                 LOG_HEX(__VA_ARGS__)
#define     A_PROTOCOL_USE_SHELL                1                   //是否使用shell（0：不使用, 1：使用）
#if         A_PROTOCOL_USE_SHELL == 1
#include "A_shell.h"
#endif
#endif

#define		A_PROTOCOL_MAST_NODE_NAME	        "PC"                //主节点名称

#define		A_PROTOCOL_USE_TABLE                0                   //是否使用协议表（0：不使用, 1：使用）注：此功能使用需将 A_PROTOCOL_USE_SYSTEM_RESET = 1

#define     A_PROTOCOL_USE_IAP                  1                   //是否使用A类协议升级（0：不使用, 1：使用）
#if A_PROTOCOL_USE_IAP == 1
extern void IAP_PreCallback(void);
extern void IAP_EndCallback(void);
#define		A_PROTOCOL_IAP_PRE_CALLBACK_FUN     IAP_PreCallback
#define		A_PROTOCOL_IAP_END_CALLBACK_FUN     IAP_EndCallback
#endif

#define A_PROTOCOL_USE_AMEMORY                  1                   //使用存储管理（0：不使用, 1：使用）
#if A_PROTOCOL_USE_AMEMORY == 1
#include "A_memory.h"
#define A_PROTOCOL_FLASH_START_ADDR                  (0x00000000)                                            //Flash 升级起始地址
#define A_PROTOCOL_FLASH_AREA_SIZE                   Amem_Get_AreaSize(AMEM_String, "IAP")                   //Flash 升级大小
#define A_PROTOCOL_FLASH_READ_FUN(data,addr,len)     Amem_Area_Read(AMEM_String, "IAP", data, addr, len)     //IAP flash读函数
#define A_PROTOCOL_FLASH_WRITE_FUN(data,addr,len)    Amem_Area_Write(AMEM_String, "IAP", data, addr, len)    //IAP flash写函数
#define A_PROTOCOL_FLASH_ERASE_FUN(addr,len)         Amem_Area_Erase(AMEM_String, "IAP", addr, len)          //IAP flash擦函数

#else
#define A_PROTOCOL_FLASH_START_ADDR             (0x00000000)                                           //Flash 升级起始地址
#define A_PROTOCOL_FLASH_AREA_SIZE              100000 
#define IAP_FLASH_READ_FUN                      W25QXX_Read
#define IAP_FLASH_WRITE_FUN                     W25QXX_Write_NoCheck
#define IAP_FLASH_ERASE_FUN                     W25QXX_erase
#endif

/***********************************************************************************/


#endif /* SRC_COMM_ACLASS_ANALAYZE_ACLASS_CONFIG_H_ */

/******************* (C) COPYRIGHT 2021 CIQTEK taoye *****END OF FILE****/
